/*
 * This file is part of the EasyLogger Library.
 *
 * Copyright (c) 2015-2016, Armink, <armink.ztl@gmail.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * 'Software'), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * Function: It is the configure head file for this library.
 * Created on: 2015-07-30
 */

#ifndef _ELOG_CFG_H_
#define _ELOG_CFG_H_

/*---------------------------------------------------------------------------*/
/* 日志输出基本控制 */

/* 启用日志输出功能
 * 若注释此宏，所有日志将被禁用，节省资源 */
#define ELOG_OUTPUT_ENABLE										

/* 设置静态输出日志级别（全局过滤）
 * 0.[A]：断言(Assert)  1.[E]：错误(Error)  2.[W]：警告(Warn) 3.[I]：信息(Info) 4.[D]：调试(Debug) 5.[V]：详细(Verbose)
 * 低于此级别的日志将不输出，例如设为 ELOG_LVL_INFO 时，DEBUG/VERBOSE 日志被过滤 */
#define ELOG_OUTPUT_LVL                          ELOG_LVL_VERBOSE

/* 启用断言检查
 * 当断言失败时会输出 ELOG_LVL_ASSERT 级别的日志并可能触发系统处理（如停机） */
#define ELOG_ASSERT_ENABLE

/* 每行日志的缓冲区大小（字节）
 * 需根据实际日志长度设置，过小将导致日志被截断 */
#define ELOG_LINE_BUF_SIZE                       1024

/* 输出日志的行号最大长度（字符数）
 * 控制日志中行号显示的位数，例如设为5可支持最大行号99999 */
#define ELOG_LINE_NUM_MAX_LEN                    5

/* 日志过滤的标签（TAG）最大长度（字符数）
 * 用于限制过滤规则中标签的长度，超过此长度的标签可能被截断 */
#define ELOG_FILTER_TAG_MAX_LEN                  30

/* 日志过滤的关键字最大长度（字符数）
 * 用于限制过滤规则中关键字的长度 */
#define ELOG_FILTER_KW_MAX_LEN                   16

/* 标签级别过滤的最大数量
 * 控制可同时设置的「标签-级别」过滤规则数量（如为TAG1设置INFO级别，为TAG2设置DEBUG级别） */
#define ELOG_FILTER_TAG_LVL_MAX_NUM              5

/* 日志输出的换行符
 * 可根据终端类型调整，例如Windows常用"\r\n"，Linux常用"\n" */
#define ELOG_NEWLINE_SIGN                        "\r\n"

/*---------------------------------------------------------------------------*/
/* 日志颜色配置（需终端支持ANSI颜色码） */

/* 启用日志颜色输出
 * 不同级别日志将以不同颜色显示，增强可读性 */
#define ELOG_COLOR_ENABLE

/* 自定义各级别日志的颜色（格式：(前景色 背景色 样式)）
 * 颜色宏定义通常来自ELOG内部（如F_RED=红色前景，B_NULL=无背景，S_NORMAL=正常样式） */
#define ELOG_COLOR_ASSERT                        (F_MAGENTA B_NULL S_NORMAL)  // 断言日志：品红前景
#define ELOG_COLOR_ERROR                         (F_RED B_NULL S_NORMAL)       // 错误日志：红色前景
#define ELOG_COLOR_WARN                          (F_YELLOW B_NULL S_NORMAL)    // 警告日志：黄色前景
#define ELOG_COLOR_INFO                          (F_CYAN B_NULL S_NORMAL)      // 信息日志：青色前景
#define ELOG_COLOR_DEBUG                         (F_GREEN B_NULL S_NORMAL)     // 调试日志：绿色前景
#define ELOG_COLOR_VERBOSE                       (F_BLUE B_NULL S_NORMAL)      // 详细日志：蓝色前景

/*---------------------------------------------------------------------------*/
/* 日志格式配置（控制日志中包含的附加信息） */

/* 启用日志中的函数名输出
 * 日志中将包含打印日志的函数名，如 "func: main" */
#define ELOG_FMT_USING_FUNC

/* 启用日志中的文件路径输出
 * 日志中将包含打印日志的文件路径，如 "file: src/main.c" */
#define ELOG_FMT_USING_DIR

/* 启用日志中的行号输出
 * 日志中将包含打印日志的代码行号，如 "line: 42" */
#define ELOG_FMT_USING_LINE

/*---------------------------------------------------------------------------*/
/* 异步输出模式配置（日志非阻塞输出） */

/* 启用异步输出模式
 * 日志先写入缓冲区，由后台线程异步发送，避免阻塞主线程 */
//#define ELOG_ASYNC_OUTPUT_ENABLE

/* 异步输出的最高日志级别
 * 高于或等于此级别的日志将异步输出，其余级别同步输出
 * 例如设为 ELOG_LVL_ASSERT 时，仅断言日志异步输出，其他级别同步输出 */
#define ELOG_ASYNC_OUTPUT_LVL                    ELOG_LVL_ASSERT

/* 异步输出模式的缓冲区大小（字节）
 * 需根据日志频率调整，过小将导致缓冲区溢出，日志丢失 */
#define ELOG_ASYNC_OUTPUT_BUF_SIZE               (ELOG_LINE_BUF_SIZE * 10)

/* 异步输出的日志必须以换行符结尾
 * 确保后台线程能正确分割每行日志 */
#define ELOG_ASYNC_LINE_OUTPUT

/* 异步输出模式使用POSIX线程（pthread）实现
 * 适用于Linux等支持pthread的系统，其他系统需修改为对应线程库实现 */
//#define ELOG_ASYNC_OUTPUT_USING_PTHREAD

/*---------------------------------------------------------------------------*/
/* 缓冲输出模式配置（日志批量输出） */

/* 启用缓冲输出模式
 * 日志先累积在缓冲区，满后或手动刷新时批量输出，减少I/O次数 */
//#define ELOG_BUF_OUTPUT_ENABLE

/* 缓冲输出模式的缓冲区大小（字节）
 * 需根据实际场景调整，平衡内存占用和输出效率 */
#define ELOG_BUF_OUTPUT_BUF_SIZE                 (ELOG_LINE_BUF_SIZE * 10)

#endif /* _ELOG_CFG_H_ */
    
